package Q3;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 计算成功举办活动需要多少名主持人
     * @param n int整型 有n个活动
     * @param startEnd int整型二维数组 startEnd[i][0]用于表示第i个活动的开始时间，startEnd[i][1]表示第i个活动的结束时间
     * @return int整型
     */
    public int minmumNumberOfHost (int n, int[][] startEnd) {
        // write code here

        //int[0] 表示第几位主持人，int[1] 表示主持的活动的结束时间
        //小根堆
        PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[1] - o2[1];
            }
        });

        int count = 0;
        for (int i = 0; i < n; i++) {
            if (queue.isEmpty() || queue.peek()[1] > startEnd[i][0]) {
                queue.offer(new int[]{++count, startEnd[i][1]});
            } else {
                PriorityQueue<int[]> queueTemp = new PriorityQueue<>(new Comparator<int[]>() {
                    @Override
                    public int compare(int[] o1, int[] o2) {
                        return o1[1] - o2[1];
                    }
                });
                boolean flag = false;
                for (int[] arr : queue) {
                    if (!flag && arr[1] <= startEnd[i][0]) {
                        arr[1] = startEnd[i][0];
                        flag = true;
                    }
                    queueTemp.offer(arr);
                }
                queue = queueTemp;
            }
        }

        return queue.size();
    }
}